<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>数据类型转换(data type conversion)</title>
  <!-- 
  在JavaScript中，数据类型转换（Type Conversion）是指将一种数据类型转换为另一种数据类型的过程。JavaScript支持两种类型的转换：隐式转换和显式转换。

    一、隐式转换（Implicit Conversion）
      隐式转换是指JavaScript在执行某些操作时自动进行的数据类型转换。例如，当不同类型的值参与运算时，JavaScript会自动将它们转换为相同的类型。

    示例：
    1. 字符串与数字的运算：
      - 当数字与字符串相加时，数字会被转换为字符串。
      let result = 5 + "5"; // "55"
    2. 布尔值与数字的运算：
      - 布尔值 `true` 会被转换为 `1` ， `false` 会被转换为 `0` 。
      let result = true + 1; // 2
      let result2 = false + 1; // 1
    3. 比较操作：
      - 在比较不同类型的值时，JavaScript会尝试将它们转换为同一类型。
      console.log(5 > "3"); // true，"3"会被转换为数字3
      console.log(5 == "5"); // true，"5"会被转换为数字5

    二、显式转换（Explicit Conversion）
      显式转换是指开发者手动将一种数据类型转换为另一种数据类型。JavaScript提供了一些内置函数来实现显式转换。

    常用的显式转换方法：
    1. 转换为字符串：
      - 使用 `String()` 函数或 `toString()` 方法。
      let num = 123;
      let str = String(num); // "123"
      let str2 = num.toString(); // "123"
    2. 转换为数字：
      - 使用 `Number()` 函数、 `parseInt()` 或 `parseFloat()` 。
      let str = "123";
      let num1 = Number(str); // 123
      let num2 = parseInt(str); // 123
      let num3 = parseFloat("123.45"); // 123.45
    3. 转换为布尔值：0/""/undefined/null/NaN -> false
      - 使用 `Boolean()` 函数。
      let value1 = 0;
      let bool1 = Boolean(value1); // false
      let value2 = "Hello";
      let bool2 = Boolean(value2); // true

    三、注意事项

    1. 特殊值：
      -  `null` 和 `undefined` 在转换时会有特殊行为。 `null` 转换为布尔值为 `false` ，而 `undefined` 也转换为布尔值为 `false` 。

    2. 空字符串：
      - 空字符串 `""` 转换为布尔值为 `false` ，其他非空字符串转换为 `true` 。

    3. NaN：
      -  `NaN` 是一个特殊的数字值，表示“不是一个数字”，在布尔上下文中转换为 `false` 。

    总结:
      数据类型转换在JavaScript中是一个重要的概念，理解隐式和显式转换的规则可以帮助开发者避免潜在的错误。在处理不同类型的数据时，合理地使用转换方法能够提高代码的可读性和稳定性。
  -->
</head>
<body>
  
  <script>
    // 一.隐式转换
    // 1. 字符串与数字的运算：- 当数字与字符串相加时，数字会被转换为字符串。
    let a = 1;
    let b = "2";
    let c = a + b; // "12"
    let result1 = 5 + "5"; // "55"
    // 2. 布尔值与数字的运算：- 布尔值 `true` 会被转换为 `1` ， `false` 会被转换为 `0` 。
    let result2 = true + 1; // 2
    let result3 = false + 1; // 1
    // 3. 比较操作：- 在比较不同类型的值时，JavaScript会尝试将它们转换为同一类型。
    console.log(5 > "3"); // true，"3"会被转换为数字3
    console.log(5 == "5"); // true，"5"会被转换为数字5

    // 二.显式转换
    // 1. String
    let num = 123;
    let str = String(num); // "123"
    let str2 = num.toString(); // "123"
    let bool2 = Boolean(value2); // true
    // 2.Number
    console.log(Number(undefined)) // NaN
    console.log(Number(true)) // 1
    console.log(Number(false)) // 0
    console.log(Number(null)) // 0
    console.log(Number("abc123")) // NaN
    console.log(Number("         123       ")) // 123
    console.log(Number("")) // 0
    console.log(Boolean(num1), Boolean(undefined))
    // 3.Boolean
    console.log(Boolean(0)) // false
    console.log(Boolean(1)) // true
    console.log(Boolean(-1)) // true
    console.log(Boolean(NaN)) // false
    console.log(Boolean(null)) // false
    console.log(Boolean(undefined)) // false
    console.log(Boolean("")) // false
    console.log(Boolean("0")) // true
  </script>
  
</body>
</html>